{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "// 此部分代码由Python程序生成 请勿手动修改 begin\n",
      "/*\n",
      "单步计算CRC\n",
      "CRC宽度: 32\n",
      "CRC多项式: 0x04c11db7\n",
      "输入数据位宽: 36\n",
      "*/\n",
      "assign crc_calc[0] = din_xor[32] ^ din_xor[38] ^ din_xor[41] ^ din_xor[42] ^ din_xor[44] \n",
      "                    ^ din_xor[48] ^ din_xor[56] ^ din_xor[57] ^ din_xor[58] ^ din_xor[60] \n",
      "                    ^ din_xor[61] ^ din_xor[62] ^ din_xor[63] ^ din_xor[64] ^ din_xor[66] \n",
      "                    ^ din_xor[69];\n",
      "assign crc_calc[1] = din_xor[32] ^ din_xor[33] ^ din_xor[38] ^ din_xor[39] ^ din_xor[41] \n",
      "                    ^ din_xor[43] ^ din_xor[44] ^ din_xor[45] ^ din_xor[48] ^ din_xor[49] \n",
      "                    ^ din_xor[56] ^ din_xor[59] ^ din_xor[60] ^ din_xor[65] ^ din_xor[66] \n",
      "                    ^ din_xor[67] ^ din_xor[69] ^ din_xor[70];\n",
      "assign crc_calc[2] = din_xor[32] ^ din_xor[33] ^ din_xor[34] ^ din_xor[38] ^ din_xor[39] \n",
      "                    ^ din_xor[40] ^ din_xor[41] ^ din_xor[45] ^ din_xor[46] ^ din_xor[48] \n",
      "                    ^ din_xor[49] ^ din_xor[50] ^ din_xor[56] ^ din_xor[58] ^ din_xor[62] \n",
      "                    ^ din_xor[63] ^ din_xor[64] ^ din_xor[67] ^ din_xor[68] ^ din_xor[69] \n",
      "                    ^ din_xor[70] ^ din_xor[71];\n",
      "assign crc_calc[3] = din_xor[33] ^ din_xor[34] ^ din_xor[35] ^ din_xor[39] ^ din_xor[40] \n",
      "                    ^ din_xor[41] ^ din_xor[42] ^ din_xor[46] ^ din_xor[47] ^ din_xor[49] \n",
      "                    ^ din_xor[50] ^ din_xor[51] ^ din_xor[57] ^ din_xor[59] ^ din_xor[63] \n",
      "                    ^ din_xor[64] ^ din_xor[65] ^ din_xor[68] ^ din_xor[69] ^ din_xor[70] \n",
      "                    ^ din_xor[71];\n",
      "assign crc_calc[4] = din_xor[32] ^ din_xor[34] ^ din_xor[35] ^ din_xor[36] ^ din_xor[38] \n",
      "                    ^ din_xor[40] ^ din_xor[43] ^ din_xor[44] ^ din_xor[47] ^ din_xor[50] \n",
      "                    ^ din_xor[51] ^ din_xor[52] ^ din_xor[56] ^ din_xor[57] ^ din_xor[61] \n",
      "                    ^ din_xor[62] ^ din_xor[63] ^ din_xor[65] ^ din_xor[70] ^ din_xor[71];\n",
      "assign crc_calc[5] = din_xor[32] ^ din_xor[33] ^ din_xor[35] ^ din_xor[36] ^ din_xor[37] \n",
      "                    ^ din_xor[38] ^ din_xor[39] ^ din_xor[42] ^ din_xor[45] ^ din_xor[51] \n",
      "                    ^ din_xor[52] ^ din_xor[53] ^ din_xor[56] ^ din_xor[60] ^ din_xor[61] \n",
      "                    ^ din_xor[69] ^ din_xor[71];\n",
      "assign crc_calc[6] = din_xor[33] ^ din_xor[34] ^ din_xor[36] ^ din_xor[37] ^ din_xor[38] \n",
      "                    ^ din_xor[39] ^ din_xor[40] ^ din_xor[43] ^ din_xor[46] ^ din_xor[52] \n",
      "                    ^ din_xor[53] ^ din_xor[54] ^ din_xor[57] ^ din_xor[61] ^ din_xor[62] \n",
      "                    ^ din_xor[70];\n",
      "assign crc_calc[7] = din_xor[32] ^ din_xor[34] ^ din_xor[35] ^ din_xor[37] ^ din_xor[39] \n",
      "                    ^ din_xor[40] ^ din_xor[42] ^ din_xor[47] ^ din_xor[48] ^ din_xor[53] \n",
      "                    ^ din_xor[54] ^ din_xor[55] ^ din_xor[56] ^ din_xor[57] ^ din_xor[60] \n",
      "                    ^ din_xor[61] ^ din_xor[64] ^ din_xor[66] ^ din_xor[69] ^ din_xor[71];\n",
      "assign crc_calc[8] = din_xor[32] ^ din_xor[33] ^ din_xor[35] ^ din_xor[36] ^ din_xor[40] \n",
      "                    ^ din_xor[42] ^ din_xor[43] ^ din_xor[44] ^ din_xor[49] ^ din_xor[54] \n",
      "                    ^ din_xor[55] ^ din_xor[60] ^ din_xor[63] ^ din_xor[64] ^ din_xor[65] \n",
      "                    ^ din_xor[66] ^ din_xor[67] ^ din_xor[69] ^ din_xor[70];\n",
      "assign crc_calc[9] = din_xor[33] ^ din_xor[34] ^ din_xor[36] ^ din_xor[37] ^ din_xor[41] \n",
      "                    ^ din_xor[43] ^ din_xor[44] ^ din_xor[45] ^ din_xor[50] ^ din_xor[55] \n",
      "                    ^ din_xor[56] ^ din_xor[61] ^ din_xor[64] ^ din_xor[65] ^ din_xor[66] \n",
      "                    ^ din_xor[67] ^ din_xor[68] ^ din_xor[70] ^ din_xor[71];\n",
      "assign crc_calc[10] = din_xor[32] ^ din_xor[34] ^ din_xor[35] ^ din_xor[37] ^ din_xor[41] \n",
      "                    ^ din_xor[45] ^ din_xor[46] ^ din_xor[48] ^ din_xor[51] ^ din_xor[58] \n",
      "                    ^ din_xor[60] ^ din_xor[61] ^ din_xor[63] ^ din_xor[64] ^ din_xor[65] \n",
      "                    ^ din_xor[67] ^ din_xor[68] ^ din_xor[71];\n",
      "assign crc_calc[11] = din_xor[32] ^ din_xor[33] ^ din_xor[35] ^ din_xor[36] ^ din_xor[41] \n",
      "                    ^ din_xor[44] ^ din_xor[46] ^ din_xor[47] ^ din_xor[48] ^ din_xor[49] \n",
      "                    ^ din_xor[52] ^ din_xor[56] ^ din_xor[57] ^ din_xor[58] ^ din_xor[59] \n",
      "                    ^ din_xor[60] ^ din_xor[63] ^ din_xor[65] ^ din_xor[68];\n",
      "assign crc_calc[12] = din_xor[32] ^ din_xor[33] ^ din_xor[34] ^ din_xor[36] ^ din_xor[37] \n",
      "                    ^ din_xor[38] ^ din_xor[41] ^ din_xor[44] ^ din_xor[45] ^ din_xor[47] \n",
      "                    ^ din_xor[49] ^ din_xor[50] ^ din_xor[53] ^ din_xor[56] ^ din_xor[59] \n",
      "                    ^ din_xor[62] ^ din_xor[63];\n",
      "assign crc_calc[13] = din_xor[33] ^ din_xor[34] ^ din_xor[35] ^ din_xor[37] ^ din_xor[38] \n",
      "                    ^ din_xor[39] ^ din_xor[42] ^ din_xor[45] ^ din_xor[46] ^ din_xor[48] \n",
      "                    ^ din_xor[50] ^ din_xor[51] ^ din_xor[54] ^ din_xor[57] ^ din_xor[60] \n",
      "                    ^ din_xor[63] ^ din_xor[64];\n",
      "assign crc_calc[14] = din_xor[34] ^ din_xor[35] ^ din_xor[36] ^ din_xor[38] ^ din_xor[39] \n",
      "                    ^ din_xor[40] ^ din_xor[43] ^ din_xor[46] ^ din_xor[47] ^ din_xor[49] \n",
      "                    ^ din_xor[51] ^ din_xor[52] ^ din_xor[55] ^ din_xor[58] ^ din_xor[61] \n",
      "                    ^ din_xor[64] ^ din_xor[65];\n",
      "assign crc_calc[15] = din_xor[35] ^ din_xor[36] ^ din_xor[37] ^ din_xor[39] ^ din_xor[40] \n",
      "                    ^ din_xor[41] ^ din_xor[44] ^ din_xor[47] ^ din_xor[48] ^ din_xor[50] \n",
      "                    ^ din_xor[52] ^ din_xor[53] ^ din_xor[56] ^ din_xor[59] ^ din_xor[62] \n",
      "                    ^ din_xor[65] ^ din_xor[66];\n",
      "assign crc_calc[16] = din_xor[32] ^ din_xor[36] ^ din_xor[37] ^ din_xor[40] ^ din_xor[44] \n",
      "                    ^ din_xor[45] ^ din_xor[49] ^ din_xor[51] ^ din_xor[53] ^ din_xor[54] \n",
      "                    ^ din_xor[56] ^ din_xor[58] ^ din_xor[61] ^ din_xor[62] ^ din_xor[64] \n",
      "                    ^ din_xor[67] ^ din_xor[69];\n",
      "assign crc_calc[17] = din_xor[33] ^ din_xor[37] ^ din_xor[38] ^ din_xor[41] ^ din_xor[45] \n",
      "                    ^ din_xor[46] ^ din_xor[50] ^ din_xor[52] ^ din_xor[54] ^ din_xor[55] \n",
      "                    ^ din_xor[57] ^ din_xor[59] ^ din_xor[62] ^ din_xor[63] ^ din_xor[65] \n",
      "                    ^ din_xor[68] ^ din_xor[70];\n",
      "assign crc_calc[18] = din_xor[34] ^ din_xor[38] ^ din_xor[39] ^ din_xor[42] ^ din_xor[46] \n",
      "                    ^ din_xor[47] ^ din_xor[51] ^ din_xor[53] ^ din_xor[55] ^ din_xor[56] \n",
      "                    ^ din_xor[58] ^ din_xor[60] ^ din_xor[63] ^ din_xor[64] ^ din_xor[66] \n",
      "                    ^ din_xor[69] ^ din_xor[71];\n",
      "assign crc_calc[19] = din_xor[35] ^ din_xor[39] ^ din_xor[40] ^ din_xor[43] ^ din_xor[47] \n",
      "                    ^ din_xor[48] ^ din_xor[52] ^ din_xor[54] ^ din_xor[56] ^ din_xor[57] \n",
      "                    ^ din_xor[59] ^ din_xor[61] ^ din_xor[64] ^ din_xor[65] ^ din_xor[67] \n",
      "                    ^ din_xor[70];\n",
      "assign crc_calc[20] = din_xor[36] ^ din_xor[40] ^ din_xor[41] ^ din_xor[44] ^ din_xor[48] \n",
      "                    ^ din_xor[49] ^ din_xor[53] ^ din_xor[55] ^ din_xor[57] ^ din_xor[58] \n",
      "                    ^ din_xor[60] ^ din_xor[62] ^ din_xor[65] ^ din_xor[66] ^ din_xor[68] \n",
      "                    ^ din_xor[71];\n",
      "assign crc_calc[21] = din_xor[37] ^ din_xor[41] ^ din_xor[42] ^ din_xor[45] ^ din_xor[49] \n",
      "                    ^ din_xor[50] ^ din_xor[54] ^ din_xor[56] ^ din_xor[58] ^ din_xor[59] \n",
      "                    ^ din_xor[61] ^ din_xor[63] ^ din_xor[66] ^ din_xor[67] ^ din_xor[69];\n",
      "assign crc_calc[22] = din_xor[32] ^ din_xor[41] ^ din_xor[43] ^ din_xor[44] ^ din_xor[46] \n",
      "                    ^ din_xor[48] ^ din_xor[50] ^ din_xor[51] ^ din_xor[55] ^ din_xor[56] \n",
      "                    ^ din_xor[58] ^ din_xor[59] ^ din_xor[61] ^ din_xor[63] ^ din_xor[66] \n",
      "                    ^ din_xor[67] ^ din_xor[68] ^ din_xor[69] ^ din_xor[70];\n",
      "assign crc_calc[23] = din_xor[32] ^ din_xor[33] ^ din_xor[38] ^ din_xor[41] ^ din_xor[45] \n",
      "                    ^ din_xor[47] ^ din_xor[48] ^ din_xor[49] ^ din_xor[51] ^ din_xor[52] \n",
      "                    ^ din_xor[58] ^ din_xor[59] ^ din_xor[61] ^ din_xor[63] ^ din_xor[66] \n",
      "                    ^ din_xor[67] ^ din_xor[68] ^ din_xor[70] ^ din_xor[71];\n",
      "assign crc_calc[24] = din_xor[33] ^ din_xor[34] ^ din_xor[39] ^ din_xor[42] ^ din_xor[46] \n",
      "                    ^ din_xor[48] ^ din_xor[49] ^ din_xor[50] ^ din_xor[52] ^ din_xor[53] \n",
      "                    ^ din_xor[59] ^ din_xor[60] ^ din_xor[62] ^ din_xor[64] ^ din_xor[67] \n",
      "                    ^ din_xor[68] ^ din_xor[69] ^ din_xor[71];\n",
      "assign crc_calc[25] = din_xor[34] ^ din_xor[35] ^ din_xor[40] ^ din_xor[43] ^ din_xor[47] \n",
      "                    ^ din_xor[49] ^ din_xor[50] ^ din_xor[51] ^ din_xor[53] ^ din_xor[54] \n",
      "                    ^ din_xor[60] ^ din_xor[61] ^ din_xor[63] ^ din_xor[65] ^ din_xor[68] \n",
      "                    ^ din_xor[69] ^ din_xor[70];\n",
      "assign crc_calc[26] = din_xor[32] ^ din_xor[35] ^ din_xor[36] ^ din_xor[38] ^ din_xor[42] \n",
      "                    ^ din_xor[50] ^ din_xor[51] ^ din_xor[52] ^ din_xor[54] ^ din_xor[55] \n",
      "                    ^ din_xor[56] ^ din_xor[57] ^ din_xor[58] ^ din_xor[60] ^ din_xor[63] \n",
      "                    ^ din_xor[70] ^ din_xor[71];\n",
      "assign crc_calc[27] = din_xor[33] ^ din_xor[36] ^ din_xor[37] ^ din_xor[39] ^ din_xor[43] \n",
      "                    ^ din_xor[51] ^ din_xor[52] ^ din_xor[53] ^ din_xor[55] ^ din_xor[56] \n",
      "                    ^ din_xor[57] ^ din_xor[58] ^ din_xor[59] ^ din_xor[61] ^ din_xor[64] \n",
      "                    ^ din_xor[71];\n",
      "assign crc_calc[28] = din_xor[34] ^ din_xor[37] ^ din_xor[38] ^ din_xor[40] ^ din_xor[44] \n",
      "                    ^ din_xor[52] ^ din_xor[53] ^ din_xor[54] ^ din_xor[56] ^ din_xor[57] \n",
      "                    ^ din_xor[58] ^ din_xor[59] ^ din_xor[60] ^ din_xor[62] ^ din_xor[65];\n",
      "assign crc_calc[29] = din_xor[35] ^ din_xor[38] ^ din_xor[39] ^ din_xor[41] ^ din_xor[45] \n",
      "                    ^ din_xor[53] ^ din_xor[54] ^ din_xor[55] ^ din_xor[57] ^ din_xor[58] \n",
      "                    ^ din_xor[59] ^ din_xor[60] ^ din_xor[61] ^ din_xor[63] ^ din_xor[66];\n",
      "assign crc_calc[30] = din_xor[36] ^ din_xor[39] ^ din_xor[40] ^ din_xor[42] ^ din_xor[46] \n",
      "                    ^ din_xor[54] ^ din_xor[55] ^ din_xor[56] ^ din_xor[58] ^ din_xor[59] \n",
      "                    ^ din_xor[60] ^ din_xor[61] ^ din_xor[62] ^ din_xor[64] ^ din_xor[67];\n",
      "assign crc_calc[31] = din_xor[37] ^ din_xor[40] ^ din_xor[41] ^ din_xor[43] ^ din_xor[47] \n",
      "                    ^ din_xor[55] ^ din_xor[56] ^ din_xor[57] ^ din_xor[59] ^ din_xor[60] \n",
      "                    ^ din_xor[61] ^ din_xor[62] ^ din_xor[63] ^ din_xor[65] ^ din_xor[68];\n",
      "// 此部分代码由Python程序生成 请勿手动修改 end\n"
     ]
    }
   ],
   "source": [
    "import myCRC\n",
    "\n",
    "# 生成单步CRC的Verilog代码\n",
    "crc_custom = myCRC.CRCConfig(\n",
    "    # 只需要这两个参数\n",
    "    width       = 32,\n",
    "    poly        = 0x04C11DB7,\n",
    ")\n",
    "# 直接用以下代码效果一样\n",
    "# crc_custom = myCRC.CRC_5_USB # 可选CRC_8_MAXIM, CRC_16_CCITT等myCRC类中定义好的CRC配置\n",
    "\n",
    "din_width = 36\n",
    "verilog_code = myCRC.CRCVerilog(crc_custom).generate_verilog_crc_one_step_code(din_width)\n",
    "print(verilog_code)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.11"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
